<div class="loader">
  <span style="--delay:1" class="ball"></span>
  <span style="--delay:2" class="ball"></span>
  <span style="--delay:3" class="ball"></span>
  <span style="--delay:4" class="ball"></span>
  <span style="--delay:5" class="ball"></span>
  <span style="--delay:6" class="ball"></span>
  <span style="--delay:7" class="ball"></span>
  <span style="--delay:8" class="ball"></span>
</div>

<style>
/* From Uiverse.io by escannord  - Tags: 3d, black, loading, loader, realistic */
.loader {
  width: 220px;
  height: 220px;
  border-radius: 50%;
  position: relative;
  border: solid 5px transparent;
  box-shadow: 5px 5px 5px rgb(88, 87, 87), inset 5px 5px 5px rgb(85, 80, 80),
    inset -1px -1px 10px rgba(0, 0, 0, 0.432),
    -1px -1px 10px rgba(0, 0, 0, 0.281);
}

.loader::before {
  content: "";
  display: inline-block;
  position: absolute;
  width: 180px;
  height: 180px;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  box-shadow: 5px 5px 20px black, -2px -2px 40px black;
  background: repeating-conic-gradient(
    rgb(61, 59, 59) 0%,
    rgb(248, 248, 246) 15%,
    rgb(54, 52, 52) 33.33%
  );
}

.ball {
  width: 15px;
  height: 15px;
  display: inline-block;
  background: radial-gradient(
    circle at 8px 5px,
    white 5%,
    rgba(54, 53, 53, 0.685)
  );
  border-radius: 50%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) translateX(97.5px);
  animation: rotate 5s calc(var(--delay) * 0.2s) infinite linear;
}

@keyframes rotate {
  0% {
    transform: translate(-50%, -50%) rotate(0deg) translateX(97.5px);
  }

  100% {
    transform: translate(-50%, -50%) rotate(360deg) translateX(97.5px);
  }
}

</style>
    